3 DEFDBL X / ALL VARIABLES BEGINNING WITH X ARE DOUBLE PRECISION
4 DEFINT A-W,Y-Z / ALL OTHER VARIABLES ARE INTERGER BY DEFAULT
5 PRINT FRE(0) / PRINT FREE MEMORY , OPTIONAL
10 DIM K$(80) / THE CHARACTERS IN THE INPUT SUBROUTINE
40 DIM XPRT(50),LBL$(50) / THE NUMBERS AND LABEL IN THE BAR CHART
45 DIM L$(20,20) / THE LINES THAT MAKE UP THE SPREADSHEET
50 DIM X(500),SCR(500),LIN(500),COL(500),CT(500),TF(500),CF(500),XCST(500),DS(500) /
51 REM X is the value of each number SCR is the screen the number is on,LIN is the line the number is on, COL is the column the number is on
52 REM CT is the calculation type, TF is the target field, CF is the secondary calculation field, XCST is the constant if any for calculations, DS is the display type
60 PRINT FRE(0) / PRINT FREE MEMORY
70 CH = 8 / CH = THE BACKSPACE CHARACTER
75 PRINT FRE(0)
80 CKT = 1 / INITIALIZE THE COLUMN COUNT TO 1
90 CKT = 1
95 LKT = 1 / INITIALIZE THE LINE COUNT TO 1
98 SN = 1 / INITIALIZE THE SCREEN TO 1
100 GOSUB 50000 / PRINT INTRO
200 GOTO 40000 / ASK FOR FILE NAME OF SPREADSHEET
500 REM ******* CLS
510 CLS / CLEAR SCREEN
520 RETURN
600 REM ** LOCATE COLUMN = 1
610 TB = 1
650 LOCATE LI,TB / LOCATE THE SPOT ON THE SCREEN
660 RETURN
4000 REM INPUT A NUMBER / looks for a number in the spot where the * is
4100 FOR T = 1 TO MAXN / FOR ALL NUMBERS
4110 IF SCR(T) = SN AND LIN(T) = LKT THEN 4200 / IF THE SCREEN NUMBER AND LINE NUMBER MATCH THEN 4200
4120 NEXT T / TRY NEXT NUMBER
4125 N = 0 / NO NUMBER IN THIS SPOT
4126 PRINT " THERE IS NO NUMBER IN THIS SPOT TRY AGAIN"
4127 PRINT "You may put a number here using option 3 or move the * to where a number exists"
4128 PRINT " PRESS ANY KEY TO CONTINUE "
4129 IF INKEY$ = "" THEN 4129 / STAY HERE UNTILL A KEY IS PRESSED
4130 RETURN
4200 IF CKT < (COL(T) - 5) OR CKT > (COL(T) + 5) OR CT(T) = 30 THEN 4120 / IF THE * IS NOT WITHIN 5 SPACES OF THE NUMBER OR THE NUMBER HAS BEEN DELETED THEN RETURN
4210 N = T /THIS IS THE NUMBER IN THIS SPOT
4220 RETURN
5000 REM - FIND TARGET FIELD
5005 CFFLG = 5
5010 GOSUB 9000 /CLEAR LINES 20-24
5020 PRINT "MOVE THE CURSOR TO THE TARGET FIELD THEN PRESS RETURN "
5060 MFLG = 5
5070 GOSUB 60000 / ALLOWS YOU TO MOVE THE CURSOR AROUND
5080 MFLG = 1
5085 GOSUB 4000 / CHECK TO SEE IF THERE IS A NUMBER IN THIS SPOT
5090 IF N = 0 THEN 5000 / IF THERE IS NO NUMBER IN THIS SPOT THEN TRY AGAIN
5100 TF(NH) = N / TARGET FIELD = THE NUMBER IN THIS SPOT
5110 TFH = N /TARGET FIELD HOLD EQUALS THE NUMBER IN THIS SPOT
5190 CFFLG = 1
5200 RETURN
5500 REM - FIND TARGET FIELD
5505 CFFLG = 5
5510 GOSUB 9000 /CLEAR LINES 20-24
5520 PRINT "MOVE THE CURSOR TO ANOTHER FIELD YOU WANT TO ADD THEN PRESS RETURN"
5560 MFLG = 5 /TURN MOVE FLAG ON
5570 GOSUB 60000 /ALLOW YOU TO MOVE THE * AROUND
5580 MFLG = 1 /TURN MOVE FLAG OFF
5585 GOSUB 4000 /CHECK TO SEE IF THERE IS A NUMBER HERE
5590 IF N = 0 THEN 5500 / IF THERE IS NO NUMBER HERE TRY AGAIN
5600 TF(N) = TFH /TARGERT FIELD OF N EQUALS TARGER FIELD HOLD
5610 CT(N) = 1 /CALCULATION TYPE IS ADD
5690 CFFLG = 1
5700 RETURN
6000 REM - FIND SECONDARY CALCULATIN FIELD
6005 SFLG = 5
6010 GOSUB 9000 /CLEAR LINES 21-24
6020 PRINT "MOVE THE CURSOR TO THE SECONDARY CALCULATION FIELD THEN PRESS RETURN"
6060 MFLG = 5 / TURN MOVE FLAG ON
6070 GOSUB 60000 /GOTO INPUT SUBROUTINE TO MOVE THE * TO THE CORRECT FIELD
6080 MFLG = 1
6085 GOSUB 4000 / CHECK TO SEE IF THERE IS A NUMBER WHERE THE * IS
6090 IF N = 0 THEN 6000 / IF THERE IS NOT A NUMBER HERE TRY AGAIN
6100 CF(NH) = N / CALCULATION FIELD EQUALS THIS NUMBER
6110 CF(N) = NH / THE CALCULATION FIELD OF THE SECONDARY CALCULATION NUMBER EQUALS THE SOURCE FIELD
6120 TF(N) = TF(NH) / THE TARGET FIELD EQUALS THE TARGET FIELD OF N HOLD
6130 CT(N) = CT(NH) / THE CALCULATION TYPE OF THE SECONDARY FIELD EQUALS THE CALCULATION TYPE OF THE SOURCE FIELD
6190 SFLG = 1
6200 RETURN
6600 REM - FIND SECONDARY CALCULATIN FIELD
6605 SFLG = 5
7000 REM - GET CONSTANT FOR CALCULATION
7100 GOSUB 9000 /CLEAR LINES 21-24
7110 PRINT "ENTER THE CONSTANT "
7120 GOSUB 60180 /INPUT A DOUBLE PRECISION NUMBER
7130 XCST(NH) = DT# /CONSTANT EQUALS THE VALUE RETURNED FROM THE SUBROUTINE
7140 RETURN
8000 REM ***** FILE NAME ACCEPLABLE TEST ************
8010 TEST = 1
8100 FOR Q = 1 TO LEN(A$) / FOR EACH CHARACTER IN A$
8110 K$(Q) = MID$(A$,Q,1) / K$ IS THE CHARACTER
8120 C = ASC(K$(Q))
8130 IF C < 48 OR C > 122 THEN TEST = 4 / IF NOT A NUMBER OR LETTER THEN TEST IS NEGITIVE
8140 IF Q = 1 AND ( C < 65 OR C > 122 ) THEN TEST = 4 /IF THE FIRST CHARACTER IS NOT A LETTER THEN TEST IS NEGITIVE
8150 NEXT Q /NEXT CHARACTER
8190 RETURN
9000 REM CLEAR BOTTOM LINES
9010 LI = 21
9015 GOSUB 600 / LOCATE 21ST LINE
9020 FOR T = 1 TO 4
9030 PRINT " "; CLEAR LINES 21-24
9040 NEXT T
9041 PRINT " ";
9042 GOSUB 600
9050 RETURN
20000 REM INPUT A NUMBER
20100 GOSUB 9000 /CLEAR LINES 21-24
20110 REM FIND NUMBER
20120 GOSUB 4000 / CHECK IF THERE IS A NUMBER HERE
20130 IF N = 0 THEN RETURN /IF THERE IS A NUMBER HERE THEN RETURN
20140 NH= N / NHOLD EQUALS N
20200 LKT = LIN(T) /LINE COUNT = LINE OF T , T EQUALS N
23250 PRINT " Enter the type of calculation you want then press return. 0 for none";
23260 LI = 24 /LINE NUMBER EQUALS 24
23270 GOSUB 600 / LOCATE
23300 GOSUB 60000 /INPUT SUBROUTINE
23305 IF DT# = 0 THEN 31000 /IF NONE THEN BACK TO OPTIONS
23310 CT(N) = DT# /CALCULATION TYPE EQUALS THE VALUE RETURNED FROM THE INPUT SUBROUTINE
23320 ON DT# GOSUB 24000,24100,24200,24300,24400,24500,24600,24700,24800,24900,25000,25100,25200,25300,25400,25500,25600,25700,25800,25900,24000,24000,24000,24000,24000,24000,24000,24000,24000,52000
23340 GOTO 31000
24000 REM - ADD ROUTINE
24010 GOSUB 5000 /INPUT TARGET FIELD
24020 GOSUB 9000 /CLEAR LINES 21-24
24030 PRINT " DO YOU WANT TO ADD ANY MORE NUMBERS TO THIS TARGET FIELD "
24035 PRINT " 1 - YES 2 - NO "
24040 GOSUB 60000 /INPUT SUBROUTINE
24050 IF DT# = 2 THEN RETURN /IF OPTION 2 THEN RETURN
24060 GOSUB 5500 /INPUT OTHER FIELDS TO ADD
24090 GOTO 24020
24100 REM - SUBTRACT
24110 GOSUB 5000 /INPUT TARGET FIELD
24120 RETURN
24200 REM MULTIPLY
24210 GOSUB 5000 /INPUT TARGET FILED
24220 GOSUB 6000 /INPUT SECONDARY CALCULATION FIELD
24230 RETURN
24300 REM DIVIDE BY ANOTHER NUMBER
24310 GOSUB 5000 /INPUT TARGET NUMBER
24320 GOSUB 6000 /INPUT SECONDARY CALCULATION NUMBER
24325 CT(N) = 5 /CALCULATION TYPE OF SECONDARY NUMBER EQUALS 5
24330 RETURN
24400 REM DIVIDE INTO ANOTHER NUMBER
24410 GOSUB 5000 /INPUT TARGET NUMBER
24420 GOSUB 6000 /INPUT SECONDARY CALCULATION NUMBER
24425 CT(N) = 4 /CALCULATION TYOE OF SECONDARY NUMBER EQUALS 4
24430 RETURN
24500 REM MAXIMUM
24510 GOSUB 5000 /INPUT TARGET NUMBER
24520 X(N) = -1E+07 /INITIALIZE X TO A LOW NUMBER
24590 RETURN
24600 REM MIN
24610 GOSUB 5000 /INPUT TARGER NUMBER
24620 X(N) = 999999999# /INITIALIZE X TO A HIGH NUMBER
24690 RETURN
24700 REM ADD TO A CONSTANT
24710 GOSUB 5000 /INPUT TARGET NUMBER
24720 GOSUB 7000 /INPUT CONSTANT
24790 RETURN
24800 REM MULTIPY BY A CONSTANT
24810 GOSUB 5000 /INPUT TARGET NUMBER
24820 GOSUB 7000 /INPUT CONSTANT
24890 RETURN
24900 REM SUBTACT FROM A CONSTANT
24910 GOSUB 5000 /INPUT TARGET NUMBER
24920 GOSUB 7000 /INPUT CONSTANT
24990 RETURN
25000 REM SUBTACT A CONSTANT FROM
25010 GOSUB 5000 /INPUT TARGER NUMBER
25020 GOSUB 7000 /INPUT CONSTANT
25090 RETURN
25100 REM DIVIDE BY A CONSTANT
25110 GOSUB 5000 /INPUT TARGET NUMBER
25120 GOSUB 7000 /INPUT CONSTANT
25190 RETURN
25200 REM DIVIDE INTO A CONSTANT
25210 GOSUB 5000 /INPUT TARGER NUMBER
25220 GOSUB 7000 /INPUT CONSTANT
25300 REM CUSTOM 13
25390 RETURN
25400 REM CUSTOM 14
25490 RETURN
25500 REM CUSTOM 15
25590 RETURN
25600 REM CUSTOM 16
25690 RETURN
25700 REM CUSTOM 17
25790 RETURN
25800 REM CUSTOM 18
25890 RETURN
25900 REM CUSTOM 19
25990 RETURN
26000 REM ABS
26010 X = ABS(X)
26030 RETURN
26100 REM ATN
26110 X = ATN(X)
26130 RETURN
26200 REM COS
26210 X = COS(X)
26230 RETURN
26300 REM EXP
26310 X = EXP(X)
26330 RETURN
26400 REM LOG
26410 X = LOG(X)
26430 RETURN
26500 REM SIN
26510 X = SIN(X)
26530 RETURN
26600 REM SQR
26610 X = SQR(X)
26630 RETURN
26700 REM SQUARED
26710 X = X * X
26730 RETURN
26800 REM TAN
26810 X = TAN(X)
26830 RETURN
26900 REM
26910 X = X(T2) + XC
26930 RETURN
27000 REM PERFORM CALCULATIONS
27050 T2 = TF(T) /T2 IS THE TARGER FIELD
27060 XK = XCST(T) /XK IS THE CONSTANT FOR CALCULATION
27070 S = CF(T) /S IS THE SECONDARY CALCULATION FIELD
27075 XS = X(S) /XS IS THE VALUE OF THE SECONDARY CALCULATION FIELD
27080 X = X(T) /X IS THE VALUE OF THE SOURCE FIELD
27100 ON CT(T) GOSUB 28000,28100,28200,28300,28400,28500,28600,28700,28800,28900,29000,29100,29200,29300,29400,29500,29600,29700,29800,29900,26000,26100,26200,26300,26400,26500,26600,26700,26800,26900
27110 X(T2) = X /SET THE TARGET FIELD TO X
27120 T$ = STR$(X) /CONVERT X TO A STRING
27130 T3 = LEN(T$) /T3 IS THE LENGTH OF T$
27140 T1$ = "__________"
27150 B$ = MID$(T1$,T3)
27160 A$ = B$ + T$ /A$ EQUALS UNDERLINES PLUS THE NUMBER
27165 A$ = LEFT$(A$,10) /A$ EQUALS THE LEFT 10 CHARACTERS OF A$
27167 DT# = X
27168 IF DS(T2) = 2 THEN GOSUB 49020 /IF DOLLAR AND CENTS DISPLAY TYPE THEN
27170 L = LIN(T2) /LINE
27180 C = COL(T2) /COLUMN
27190 S = SCR(T2) /SCREEN
27200 IF L$(S,L) = "" THEN L$(S,L) = " "
27205 L$ = L$(S,L)
27210 B$ = MID$(L$,1,C)
27220 T = LEN(A$)
27230 T = C + T+1
27240 C$ = MID$(L$,T)
27250 L$(S,L) = B$ + A$ + C$ /ENTIRE LINE
27260 IF S = SN THEN GOSUB 27800 /IF THE LINE IS ON THE CURRENT SCREEN THEN PRINT THE LINE
27300 IF CT(T2) = 0 THEN GOTO 31000 /IF THERE IS NO CALCULATION TYPE THE GOTO OPTIONS
27310 T = T2 /THE FIELD TO CALCULATE IS THE TARGET FIELD
27320 GOTO 27000 /CONTINUE WITH CALCULATIONS FOR TARGET FIELD
27800 REM PRINT CALCULATED LINE ON SCREEN
27810 LI = L /LINE NUMBER
27820 GOSUB 600 /LOCATE
27830 PRINT L$(SN,L) /PRINT THE LINE
27840 LI = LKT /LINE EQUALS LINE COUNT
27850 TB = CKT /TAB EQUALS COLUME COUNT
27855 GOSUB 650 /LOCATE
27860 RETURN
28000 REM ADD TO A FIELD
28010 X = X(T2) + XC /VALUE OF THE TARGET FIELD PLUS THE CHANGE IN SOURCE FIELD
28030 RETURN
28100 REM SUBTRACT
28110 X = X(T2) - XC /VALUE OF THE TARGET FIELD MINUS THE CHANGE IN THE TARGET FIELD
28130 RETURN
28200 REM MULT
28210 X = X(T)*XS /VALUE OF THE SOURCE FIELD TIMES VALUE OF THE SECONDARY FIELD
28230 RETURN
28300 REM DIVIDE BYFIELD
28305 IF XS = 0 THEN X = 0
28306 IF XS = 0 THEN RETURN /DO NOT DIVIDE BY 0
28310 X = X(T)/XS
28330 RETURN
28400 REM DIVIDE INTO
28405 IF X(T) = 0 THEN X = 0
28406 IF X(T) = 0 THEN RETURN /DO NOT DIVIDE BY 0
28410 X = XS/X(T)
28430 RETURN
28500 REM MAX
28510 IF X(T) > X(T2) THEN X = X(T) ELSE X =X(T2) /IF SOURCE FIELD IS GREATER THEN THE TARGET FIELD THEN TARGET FIELD EQUALS THE SOURCE FIELD
28530 RETURN
28600 REM MIN
28610 IF X(T) < X(T2) THEN X = X(T) ELSE X = X(T2) /IF SOURCE FIELD IS LESS THEN THE TARGET FIELD THEN TARGET FIELD EQUALS THE SOURVE FIELD
28630 RETURN
28700 REM ADD CONSTANT
28710 X = X(T) + XK
28730 RETURN
28800 REM MULTIPLY CONSTANT
28810 X = X(T)* XK
28830 RETURN
28900 REM SUBTRACT CONSTANT
28910 X = X(T)-XK
28930 RETURN
29000 REM SUBTRACT FROM CONSTANT
29010 X = XK - X(T)
29030 RETURN
29100 REM DIVIDE BY A CONSTANT
29110 X = X(T)/XK
29130 RETURN
29200 REM DIVIDE INTO A CONSTANT
29205 IF X(T) = 0 THEN X = 0
29206 IF X(T) = 0 THEN RETURN /DO NOT DIVIDE BY 0
29210 X = XK/X(T)
29230 RETURN
29300 REM CUSTOM 14
29330 RETURN
29400 REM CUSTOM 15
29430 RETURN
29500 REM CUSTOM 16
29530 RETURN
29600 REM CUSTOM 17
29630 RETURN
29700 REM CUSTOM 18
29730 RETURN
29800 REM CUSTOM 19
29830 RETURN
29900 REM CUSTOM 20
29930 RETURN
30000 REM START SPREAD SHEET
30010 GOSUB 500 /CLEAR SCREEN
30100 REM
30200 FOR T = 1 TO 20
30210 PRINT L$(SN,T) /PRINT THE SPREADSHEET LINES
30220 NEXT T
30300 LI = 1
30310 GOSUB 600 /LOCATE
30320 PRINT "*"
30330 LKT = 1 /INITIALIZE LINE COUNT TO 1
30340 CKT = 1 /INITIALIZE COLUMN COUNT TO 1
31000 REM *** MENU
31010 IF CFFLG = 5 THEN 5000 /IF CALCULATION FLAG
31030 IF SFLG = 5 THEN 6000 /IS SECONDARY FLAG
31050 LI = 21 /LINE 21
31060 GOSUB 600 /LOCATE LINE 21
31070 PRINT "*** ENTER THE OPTION NUMBER THEN PRESS RETURN *** ON SCREEN ";SN
31080 PRINT "0-EXIT 1-INPUT NUMBER 2-INPUT OVERLAY LINE 3-NEW NUMBER 4-DEFINE CALCULATION "